package com.kingyun.gpsinspection.purificationservice.facade.service.jsm.organization;

import com.kingyun.gpsinspection.purificationservice.facade.model.jsm.*;

import java.util.List;
import java.util.Map;

/**
 * @version V1.0
 * @Description: ${TODO}(组织机构服务层)
 * @author: YuPeng
 * @date: 2016/11/16,0016
 */
public interface JsmOrganizationService {
    /**
     * 查询组织树
     *
     * @return
     * @throws Exception
     */
    public List<Ztree> queryOrgTree(String id) throws Exception;

    /**
     * 将组织机构信息转换为组织树
     *
     * @param orglist
     * @return
     * @throws Exception
     */
    public List<Ztree> queryOrgTreeByOrgList(List<Organization> orglist) throws Exception;

    /**
     * 查询组织机构子节点
     *
     * @param orgId
     * @return
     * @throws Exception
     */
    public List<Organization> queryNodeByOrgId(String orgId) throws Exception;

    /**
     * 查询组织机构子节点：不显示pipeline和well
     *
     * @param orgId
     * @return
     * @throws Exception
     */
    public List<Organization> queryNodeWithoutPipelineWellByOrgId(String orgId) throws Exception;

    /**
     * 查询组织详情
     *
     * @param orgid
     * @return
     * @throws Exception
     */
    public Organization findOrgById(String orgid) throws Exception;

    /**
     * 新增组织机构
     *
     * @param org
     * @return
     * @throws Exception
     */
    public int addOrg(Organization org, String uploadFiles,
                      String deletedFiles, Employee employee) throws Exception;

    /**
     * 修改组织
     *
     * @param org
     * @return
     * @throws Exception
     */
    public int updateOrg(Organization org, String uploadFiles,
                         String deletedFiles, Employee employee) throws Exception;

    /**
     * 查询组织结构层级列表
     *
     * @return
     * @throws Exception
     */
    public List<OrgLevel> queryOrgLevels() throws Exception;

    /**
     * 当前端为添加状态时
     * 查询数据库中组织名称是否已存在
     *
     * @return
     * @throws Exception
     */
    public boolean checkOrgName(String orgId, String orgName) throws Exception;

    /**
     * 按照当前组织机构orgId查询层级
     * 再使用查询出的层级+1获取当前层级的下级机构列表
     *
     * @return
     * @throws Exception
     */
    public List<OrgLevel> queryOrgLevelsByIndex(String index) throws Exception;

    /**
     * 按机构ID获取员工列表
     *
     * @param orgId
     * @return
     * @throws Exception
     */
    List<EmployeeSimpleVo> getEmpListByOrgId(String orgId) throws Exception;


    /**
     * 查询组织树新增查询参数
     *
     * @return
     * @throws Exception
     */
    public List<Ztree> queryOrgTrees(Organization organization) throws Exception;

    /**
     * 查询组织树新增查询参数
     *
     * @return
     * @throws Exception
     */
    public List<Ztree> queryOrgZtrees(Organization organization) throws Exception;

    /**
     * 按给定的机构ID查询机构详情
     *
     * @param orgId
     * @return
     */
    Organization selectOrgByOrgId(String orgId);

    /**
     * @param list
     * @Author 卢曼成
     * @Description 批量插入
     * @Date 2017/2/8 18:04
     */
    int insertList(List<Organization> list);

    /**
     * @param list
     * @Author 卢曼成
     * @Description 批量修改
     * @Date 2017/2/8 18:04
     */
    int updateList(List<Organization> list);

    /**
     * @param list
     * @Author 卢曼成
     * @Description 批量逻辑删除
     * @Date 2017/2/8 17:18
     */
    int deleteList(List<Organization> list);


    /**
     * 新增机构
     *
     * @param record
     * @return
     */
    int insert(Organization record);

    /**
     * 新增机构
     *
     * @param record
     * @return
     */
    int insertSelective(Organization record);

    /**
     * 更新机构
     *
     * @param record
     * @return
     */
    int updateByPrimaryKey(Organization record);

    /**
     * 判断是否为空,更新机构
     *
     * @param record
     * @return
     */
    int updateByPrimaryKeySelective(Organization record);

    /**
     * 删除机构
     *
     * @param orgId
     * @return
     */
    int deleteOrg(String orgId);

    /**
     * @return List<String>
     * @Author 卢曼成
     * @Description 查询所有子项
     */
    List<Organization> selectByOrgItem(Organization param);

    /**
     * 根据ORG查询井或场站或管线信息
     *
     * @param org
     * @Author 卢曼成
     */
    Map queryWellOrStationOrPipeline(Organization org);

    /**
     * 初始化整个组织树
     *
     * @return List<Ztree>
     * @Author 卢曼成
     */
    List<Ztree> initWholeOrgTree(String orgId, String keyword);


    /**
     * 删除组织
     *
     * @param orgId
     * @return
     * @throws Exception
     */
    public int delOrg(String orgId, String orgLevel) throws Exception;

    /**
     * 根据人员信息
     * 获得当前人员的组织机构
     *
     * @param employee  人员信息
     * @param lessLevel 最小层级
     * @param maxLevel  最大层级
     */
    List<Organization> getOrganizationList(Employee employee, String maxLevel, String lessLevel) throws Exception;

    /**
     * @param employee 人员组合信息 ，
     */
    List<Organization> getOrganizationList(Employee employee) throws Exception;


    /**
     * 将组织组合数据转换成Ztree
     *
     * @param organizationList 组织机构数据集合{用于查询出多组组织机构 和 单个组织机构 }
     * @return
     */
    List<Ztree> setZtree(List<Organization> organizationList) throws Exception;

    /**
     * @param list
     * @return List<String>
     * @Author 卢曼成
     * @Description 根据组织ID查询信息是否存在
     * @CreateDateTime 2017/3/23 18:21
     **/
    List<String> selectByListId(List<Organization> list);

    /**
     * @param orgId    组织ID
     * @param minLevel 最小层级
     * @param maxLevel 最大曾是
     * @return List<Organization>
     * @Author 卢曼成
     * @Description 根据组织ID查询组织下所有组织数据集合
     * @CreateDateTime 2017/3/27 13:50
     **/
    public List<Organization> selectOrgListByEmployee(String orgId, String minLevel, String maxLevel);


    /**
     * 查询自己的组织机构树并转化成Ztree
     */
    public List<Ztree> selectMyOrgs(String orgId, EmployeeVo employee, String keyword);

    /**
     * 按机构名称查询机构信息
     *
     * @param orgName
     * @return
     */
    Organization selectOrgByName(String orgName);

    /**
     * 获取场站对应的作业区
     *
     * @param orgId
     * @return
     */
    String getUserOrgId(String orgId);


    /**
     * @param list
     * @param departmentList
     * @Author 卢曼成
     * @Description 接口逻辑添加批量处理
     * @CreateDateTime 2017/3/30 9:02
     **/
    public void insertList(List<Organization> list, List<Department> departmentList);

    /**
     * @param list
     * @param departmentList
     * @Author 卢曼成
     * @Description 接口逻辑修改批量处理
     * @CreateDateTime 2017/3/30 9:02
     **/
    public void updateList(List<Organization> list, List<Department> departmentList);

    /**
     * @param list
     * @param departmentList
     * @Author 卢曼成
     * @Description 接口逻辑删除批量处理
     * @CreateDateTime 2017/3/30 9:02
     **/
    public void deleteList(List<Organization> list, List<Department> departmentList);

    /**
     * @param list
     * @return List<Organization>
     * @Author 卢曼成
     * @Description 根据组织条件查询数据集合
     * @CreateDateTime 2017/3/23 18:21
     **/
    public List<Organization> selectByOldIdListId(List<Organization> list);

    /**
     * 获取当前组织及祖先组织：向上遍历
     *
     * @param
     * @param orgId 组织id
     */
    List<Organization> selectUpByTree(String orgId);

    /**
     * 获取当前组织及祖先组织：向上遍历
     *
     * @param
     * @param orgId 组织id
     */
    List<Organization> selectDownByTree(String orgId);

    /**
     * 获取当前组织及祖先组织：向上遍历
     *
     * @param
     * @param orgId 组织id
     */
    List<Organization> selectDownByTreeWithoutPipelineWell(String orgId);


    /**
     * @param orgIdList 组织机构ID数据组合
     * @param employee  当前登录人员
     * @return 返回组织机构数组集合
     * @throws Exception 异常处理
     */
    List<Organization> selectBottomToTopOrgList(List<String> orgIdList, Employee employee) throws Exception;


    /**
     * @param orgId      用户当前orgId
     * @param pOrgId     异步加载orgId
     * @param keyword    模糊搜索条件
     * @param orgLevelId 查询小于当前级别数据
     * @return List<Ztree>
     * @Author 卢曼成
     * @Description
     * @CreateDateTime 2017/5/24 8:59
     */
    List<Ztree> initTree(String orgId, String pOrgId, String keyword, String orgLevelId);

}
